package cmw

import (
	"errors"
	"github.com/gin-gonic/gin"
	"web/app"
	"web/app/dao"
	"web/app/enum"
	"web/app/mode"
	"web/conf"
)

type C_auto struct {
}

func (c *C_auto) CMW_Auto_Admin() gin.HandlerFunc {
	return func(c *gin.Context) {
		token := c.Query("token")
		err, a := app.GetToken(token)
		if err == nil && a.Power == enum.Auto_admin && a.Time_upData == conf.Conf_Get("login.time") {
			c.Next() //继续执行
			return
		}
		c.Abort()       //终止执行
		if err != nil { //token解析失败
			app.Response(c, 600, err.Error())
		} else if a.Time_upData != conf.Conf_Get("login.time") { //登录时间不正确
			app.Response(c, 600, "登录已过期,请重新登录")
		} else { //权限不足
			app.Response(c, 600, "权限不足")
		}
	}
}

func check_user_web(c *gin.Context) error {
	token := c.Query("token")
	err, a := app.GetToken(token)
	if err != nil {
		return err
	} else if a.Power != enum.Auto_user {
		return errors.New("权限不足")
	}

	err, user := dao.User{}.Get(&mode.User{Uid: a.Uid})
	if err != nil {
		return errors.New("系统繁忙")
	} else if user.State != enum.User_State_Yes {
		return errors.New("账号已被禁用")
	} else if a.Time_upData != user.Uptime {
		return errors.New("token已失效")
	}

	c.Set("uid", a.Uid)
	c.Set("aid", a.Aid)
	c.Set("dev", a.Dev)
	return nil
}
func (c *C_auto) CMW_Auto_User() gin.HandlerFunc {
	return func(c *gin.Context) {
		err := check_user_web(c)
		if err != nil {
			c.Abort()
			app.Response(c, 600, err.Error())
			return
		}
		c.Next()
	}
}

type i_auto interface {
	Auto_Admin() gin.HandlerFunc
	Auto_User() gin.HandlerFunc
}
